home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / eulisp / comp0_89.lha / Feel / Boot / Compiler / use.em < prev    next >
Lisp/Scheme  |  1993-02-02  |  1KB  |  63 lines

  1. ;; Eulisp Module
  2. ;; Author: pete broadbery
  3. ;; File: use.em
  4. ;; Date: 15/sep/1991
  5. ;;
  6. ;; Project:
  7. ;; Description: 
  8. ;; calculates the use-set of a form
  9. ;;
  10.  
  11. (defmodule use 
  12.   (standard0
  13.    list-fns
  14.    
  15.    abs-syntx
  16.    syntax-utils
  17.    props
  18.    pass
  19.    )
  20.   ()
  21.   
  22.   (defun use-set (x)
  23.     (if (cached-use-set x)
  24.     (car (cached-use-set x))
  25.       (let ((cs (calc-use-set x)))
  26.     (format t "use: ~a is: ~a~%" x cs)
  27.     ((setter cached-use-set) x (cons cs t))
  28.     cs)))
  29.   
  30.   (defgeneric calc-use-set (obj))
  31.  
  32.   (defmethod calc-use-set ((x syntax-obj))
  33.     (fold append
  34.       (mapcar use-set (subcomponents x))
  35.       nil))
  36.  
  37.   (defmethod calc-use-set ((x ident-term))
  38.     (print x)
  39.     (setq y x)
  40.     (list (car (ident-defblock x))))
  41.  
  42.   (defmethod calc-use-set ((x lambda-term))
  43.     (if (inline-lambda x)
  44.     (set-difference (call-next-method)
  45.             (lambda-ids x))
  46.       nil))
  47.  
  48.   (defmethod calc-use-set ((x block-term))
  49.     (set-difference (call-next-method)
  50.             (find-decls x)))
  51.  
  52.   ;; should be destructive delete.
  53.  
  54.   (defun set-difference (x y)
  55.     (cond ((null y) x)
  56.       (t (set-difference 
  57.           (deleteq x (car y))
  58.           (cdr y)))))
  59.             
  60.   (export use-set)
  61.   ;; end module
  62.   )
  63.